package com.kerbores.meeting.domain;

import java.io.Serializable;

import org.nutz.dao.entity.annotation.ColDefine;
import org.nutz.dao.entity.annotation.Column;
import org.nutz.dao.entity.annotation.Comment;
import org.nutz.dao.entity.annotation.Table;
import org.nutz.lang.Strings;

/**
 * 权限定义
 * 
 * @author Kerbores
 *
 *         Create At 2015年1月9日 下午12:31:14
 */
@Table("nutz_permission")
public class Permission extends Entity implements Serializable {
	/**
	 * 权限类型
	 * 
	 * @author Kerbores
	 *
	 *         Create At 2015年1月9日 下午12:31:59
	 */
	public static enum PermissionType {
		UNKNOW(0, "UNKNOW"), URL(1, "URL"), OPER(2, "OPER");
		/**
		 * 从值初始化
		 * 
		 * @param value
		 * @return
		 */
		public static PermissionType from(int value) {
			for (PermissionType type : values()) {
				if (type.getValue() == value) {
					return type;
				}
			}
			return UNKNOW;
		}

		/**
		 * 从名称初始化
		 * 
		 * @param name
		 * @return
		 */
		public static PermissionType from(String name) {
			for (PermissionType type : values()) {
				if (Strings.equalsIgnoreCase(name, type.getName())) {
					return type;
				}
			}
			return UNKNOW;
		}

		private int value;

		private String name;

		/**
		 * @param value
		 *            权限类型值
		 * @param name
		 *            权限类型名称
		 */
		private PermissionType(int value, String name) {
			this.value = value;
			this.name = name;
		}

		/**
		 * @return the name
		 */
		public String getName() {
			return name;
		}

		/**
		 * @return the value
		 */
		public int getValue() {
			return value;
		}

		/**
		 * @param name
		 *            the name to set
		 */
		public void setName(String name) {
			this.name = name;
		}

		/**
		 * @param value
		 *            the value to set
		 */
		public void setValue(int value) {
			this.value = value;
		}

	}

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * 权限类型
	 */
	@Column("permission_type")
	@Comment("权限类型枚举")
	private PermissionType permissionType;
	/**
	 * 权限的key,主要用于规范化和系统调用时的查询
	 */
	@Column("p_key")
	@Comment("权限定义key,检查权限时主要通过这个字段进行,谨慎修改")
	private String key;
	/**
	 * 权限名称,主要用于权限管理系统的展示
	 */
	@Column("p_name")
	@ColDefine(width = 500)
	@Comment("权限名称")
	private String name;

	/**
	 * @return the key
	 */
	public String getKey() {
		return key;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @return the permissionType
	 */
	public PermissionType getPermissionType() {
		return permissionType;
	}

	/**
	 * @param key
	 *            the key to set
	 */
	public void setKey(String key) {
		this.key = key;
	}

	/**
	 * @param name
	 *            the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @param permissionType
	 *            the permissionType to set
	 */
	public void setPermissionType(PermissionType permissionType) {
		this.permissionType = permissionType;
	}

}
